package ve.com.wayoyo.wuml_case.DibujoDiagramas;

import ve.com.wayoyo.wuml_case.Exceptions.MultiplicityException;

public class CompAtributo {

	private String NombreVariable;
	private String TipoDato;
	private String NivelAcceso;
	private boolean isFinal;
	private boolean isStatic;
	private boolean isVolatile;
	private boolean _haveMultiplicity = false;
	private String _leftMultiplicity;
	private String _rightMultiplicity;



	public boolean isMultiplicity() {
		return _haveMultiplicity;
	}

	public void set_haveMultiplicity(boolean _haveMultiplicity) {
		this._haveMultiplicity = _haveMultiplicity;
	}

	public String get_leftMultiplicity() {
		return _leftMultiplicity;
	}

	public void set_leftMultiplicity(String _leftMultiplicity) {
		this._leftMultiplicity = _leftMultiplicity;
	}

	public String get_rightMultiplicity() {
		return _rightMultiplicity;
	}

	public void set_rightMultiplicity(String _rightMultiplicity) throws MultiplicityException {		
		this._rightMultiplicity = _rightMultiplicity;
		if (!this._rightMultiplicity.equals("*"))
			if ((Integer.valueOf(this._leftMultiplicity)) >(Integer.valueOf(this._rightMultiplicity)))
				throw new MultiplicityException();
	}

	public boolean isFinal() {
		return isFinal;
	}

	public void setFinal(boolean isFinal) {
		this.isFinal = isFinal;
	}

	public boolean isStatic() {
		return isStatic;
	}

	public void setStatic(boolean isStatic) {
		this.isStatic = isStatic;
	}

	public boolean isVolatile() {
		return isVolatile;
	}

	public void setVolatile(boolean isVolatile) {
		this.isVolatile = isVolatile;
	}

	public CompAtributo(String nombreVariable,String nivelAcceso){
		NivelAcceso = nivelAcceso;
		NombreVariable = nombreVariable; 
	}

	public CompAtributo(String nombreVariable,String nivelAcceso,String tipoDato){
		NivelAcceso = nivelAcceso;
		NombreVariable = nombreVariable;
		TipoDato = tipoDato;
	}
	public String getNivelAcceso() {
		return NivelAcceso;
	}
	public void setNivelAcceso(String nivelAcceso) {
		NivelAcceso = nivelAcceso;
	}
	public String getNombreVariable() {
		return NombreVariable;
	}
	public void setNombreVariable(String nombreVariable) {
		NombreVariable = nombreVariable;
	}
	public String getTipoDato() {
		return TipoDato;
	}
	public void setTipoDato(String tipoDato) {
		TipoDato = tipoDato;
	}

	public String getText(){
		String Respuesta ;
		if(NivelAcceso.equals("public")){
			Respuesta = "+ ";
		}else if(NivelAcceso.equals("private")){
			Respuesta = "- ";
		}else if(NivelAcceso.equals("protected")){
			Respuesta = "# ";
		}else{
			Respuesta = "";
		}
		if (isFinal){
			Respuesta = Respuesta + "final ";
		}
		if (isVolatile){
			Respuesta = Respuesta + "volatile ";
		}

		Respuesta = Respuesta + NombreVariable + " : ";
		Respuesta = Respuesta + TipoDato;

		if(_haveMultiplicity){
			try{
				int M = Integer.valueOf(_leftMultiplicity);
				int N;
				if(_rightMultiplicity.equals("*")){
					if(M == 1){
						Respuesta = Respuesta + " [*]";
					}else{
						Respuesta = Respuesta + " [" + M + "..*]";  
					}
				}else{
					N = Integer.valueOf(_rightMultiplicity);
					if(M == N){
						Respuesta = Respuesta + " [" + M + "]";
					}else{
						Respuesta = Respuesta + " [" + M + ".." + N + "]";
					}
				}
			}catch (Exception e) {
				System.out.println(e.getMessage());
			}
		}
		return Respuesta;
	}

	public String generarDOM(){
		String DOM = "\t\t<Atributo NombreVariable=\""+NombreVariable+"\" TipoDato=\""+TipoDato+"\" NivelAcceso=\""+NivelAcceso+"\" isFinal=\""+isFinal+"\" isStatic=\""+isStatic+"\" isVolatile=\""+isVolatile+"\">\n";
		if(_haveMultiplicity)
			DOM = DOM + "\t\t\t<Multiplicidad Left=\""+_leftMultiplicity+"\" Right=\""+_rightMultiplicity+"\" />\n";
		DOM = DOM + "\t\t</Atributo>\n";
		return DOM;
	}

	public String getCode(String Languaje){
		String atrib = "";		
		if (Languaje.equals("Java")){
			if (!getNivelAcceso().equals("default"))
				atrib = atrib+getNivelAcceso()+" ";
			if (isVolatile)
				atrib = atrib + "volatile ";
			if (isStatic)
				atrib = atrib + "static ";
			if (isFinal)
				atrib = atrib + "final ";
			if (isMultiplicity()){
				if(get_rightMultiplicity().equals("*")){
					atrib = atrib + " ArrayList<"+getTipoDato()+">";
					atrib = atrib +" "+getNombreVariable();
					atrib = atrib+" = new ArrayList<"+getTipoDato()+">"+"();";
				}else if (get_leftMultiplicity().equals(get_rightMultiplicity())){
					atrib = atrib + getTipoDato()+"[] "+getNombreVariable();
					atrib = atrib + " = new "+ getTipoDato()+"["+get_leftMultiplicity()+"];";
				}else {
					atrib = atrib + getTipoDato()+"[] "+getNombreVariable();
					atrib = atrib + " = new "+ getTipoDato()+"["+get_rightMultiplicity()+"];";
				}				
			}else{
				atrib = atrib + getTipoDato() + " " + getNombreVariable()+";";
			}			
		}
		return atrib;		
	}
}	


